
03.01.2015, 00:09
|
Аспирант
|
|
Регистрация: 02.01.2015
Сообщений: 32
|
|
Как правильно отобразить json-данные autocomlete и вывести результаты работы
На страничке в наличии поля для заполнения :
textarea id="AC10" - поле "поиска"
span id="AC10-id" и span id="AC10-description" - поля вывода выбранного
<table align="center" border="0">
<tr class="button2" style="color: #0000ff; text-transform: none;"><th><b>Автодополнение слов</b>
<br><textarea id="AC10" rows="3" cols="50"></textarea><div style="text-align: left;"><span id="AC10-id"></span><br><span id="AC10-desc"></span></div>
</th></tr>
</table>
При использовании стандартного autocomplete, пока данные были единичными строками все было норм, но как только данные были расширены до считывания из БД и приобрели формат json-строки застопорилось т.к. разобрать json-строку и вывести только необходимое в поле "поиска" не знаю как. (Для локального считывания minLength пока равен 0, в реальных условиях значение будет увеличено...)
$(function() {
function AC10() {
$( "#AC10" ).autocomplete({
source: function(request, response) {
$.ajax({
url: "json_ac.php",
dataType: "json",
data: { term: request.term },
success: function (data) {
response( data );
alert( "Прибыло \ndata:\n" + data + "\n(Это всё... )" );
}
});
},
focus: function( event, ui ) {
$( "#AC10" ).val( ui.item.name );
return false;
},
select: function( event, ui ) {
$( "#AC10" ).val( ui.item.name );
$( "#AC10-id" ).text( "Id = " + ui.item.id + "." );
$( "#AC10-desc" ).html( "Description: <b>" + ui.item.desc + "</b>" );
return false;
},
minLength: 0
});
}
$( "#AC10" ).change(AC10);
AC10();
});
Данные для формирования в json_ac.php берутся из БД MySQL корректно. Запрос и отклик проходит нормально. При попытке получить запрос вываливается весь доступный список, а необходимо чтобы формировался список доступных вариантов из поля name, а не пустые строки и после выбора данные id, name и desc записывались в свои поля (AC10-id, AC10 и AC10-desc соответственно):
Код:
|
["{\"id\":\"58\", \"name\":\"02-rasputin.mp3\", \"desc\":\"Boney M\"}","{\"id\":\"22\", \"name\":\"06-rivers_of_babylon.mp3\", \"desc\":\"Boney M\"}","{\"id\":\"43\", \"name\":\"10-heart_of_gold.mp3\", \"desc\":\"Boney M\"}","{\"id\":\"98\", \"name\":\"01-mamma_mia.mp3\", \"desc\":\"ABBA\"}","{\"id\":\"365\", \"name\":\"06-bang-a-boomerang.mp3\", \"desc\":\"ABBA\"}","{\"id\":\"256\", \"name\":\"11-so_long.mp3\", \"desc\":\"ABBA\"}","{\"id\":\"159\", \"name\":\"04-happy_nation.mp3\", \"desc\":\"Ace of base\"}","{\"id\":\"753\", \"name\":\"08-dancer_in_a_daydream.mp3\", \"desc\":\"Ace of base\"}","{\"id\":\"65\", \"name\":\"12-young_and_proud.mp3\", \"desc\":\"Ace of base\"}","{\"id\":\"85\", \"name\":\"17-space_mix.mp3\", \"desc\":\"Modern Talking\"}","{\"id\":\"12\", \"name\":\"01-youre_my_heart.mp3\", \"desc\":\"Modern Talking\"}","{\"id\":\"47\", \"name\":\"07-atlantis_is_calling.mp3\", \"desc\":\"Modern Talking\"}"] |
Последний раз редактировалось WarDoctor, 04.01.2015 в 00:56.
|
|

04.01.2015, 01:03
|
Аспирант
|
|
Регистрация: 02.01.2015
Сообщений: 32
|
|
Активность профессионалов ОЧУМЕТЬ можно! Даже ответить не поспешили...
Решение нашел самостоятельно.
Решение предназначено только для "чайников", каким и сам являюсь:
1. В блоке
success: function (data) {
response( data );
alert( "Прибыло \ndata:\n" + data + "\n(Это всё... )" );
}
удаляем alert-строку.
2. В строку 25 скрипта вставляем отображение данных
2.1. Уточняем версию JQuery-скрипта каким пользуемся:
2.1.1. Для версии до 1.10 используем data(" autocomplete")
minLength: 1
}).data("autocomplete")._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.name + "</a>" )
.appendTo( ul );
};
2.1.2. Для версий после 1.10 используем data(" ui-autocomplete")
minLength: 1
}).data("ui-autocomplete")._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.name + "</a>" )
.appendTo( ul );
};
И последнее при настройке считывания из БД (типа MySQL) надо использовать поиск через
$_GET
или
$_POST
который используется для запроса в БД. Если на страничке присутствует несколько полей с autocomplete, то для каждого поля необходимо предусмотреть свою переменную в скрипте за это отвечает строка
data: { term: request.term },
Например для полей с номерами 0-3 переменные для каждого JS-скрипта отдельно нужно обозвать
term0: request.term
term1: request.term
term2: request.term
term3: request.term
, в запросах к БД сделать по типу
$_GET['term0'], $_GET['term1'], $_GET['term2'], $_GET['term3']
(или $_POST) соответственно. При формировании запроса из скрипта каждый запрос должен быть в отдельном файле, иначе каша в которой разобраться весьма сложно...
Последний раз редактировалось WarDoctor, 05.01.2015 в 12:45.
|
|

04.01.2015, 01:15
|
 |
Профессор
|
|
Регистрация: 23.12.2013
Сообщений: 1,856
|
|
WarDoctor,
Цитата:
|
Активность профессионалов ОЧУМЕТЬ можно! Даже ответить не поспешили...
|
Чтобы быстрее ответили, в следующий раз пиши не в час ночи, а в четыре. В этот время мы тут как раз все собираемся и отвечаем на вопросы.
|
|

04.01.2015, 11:28
|
 |
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от WarDoctor
|
Вчера, 00:09
Как правильно отобразить json-данные autocomlete и вывести результаты работы
|
Сообщение от WarDoctor
|
Сегодня, 01:03
Активность профессионалов ОЧУМЕТЬ можно! Даже ответить не поспешили...
|
о, умаялся за день, не заметил, как уснул, мой господин
ох-еть народ пошёл
|
|

05.01.2015, 03:31
|
Аспирант
|
|
Регистрация: 02.01.2015
Сообщений: 32
|
|
Сообщение от Safort
|
WarDoctor,
Чтобы быстрее ответили, в следующий раз пиши не в час ночи, а в четыре. В этот время мы тут как раз все собираемся и отвечаем на вопросы.
|
О великий господин, Safort, приношу извинения за Ваше беспокойство и за то что соизволили снизойти и отметить своим вниманием суточной давности вопрос такого смерда каковым являюсь.
В будущем наберусь терпения и размещу запрос за 3 года до необходимости его исполнения, дабы не перетруждать Вас...
|
|

05.01.2015, 03:35
|
Аспирант
|
|
Регистрация: 02.01.2015
Сообщений: 32
|
|
Сообщение от bes
|
о, умаялся за день, не заметил, как уснул, мой господин
ох-еть народ пошёл
|
Да ладно все мы человеки. Понимаю, что иногда бывает не до разбора запросов других... Над проблемой бился неделю... Но главное, что решение найдено и теперь другим будет проще при решении подобных задач
Спасибо за понимание и уважение к другим
|
|

05.01.2015, 03:36
|
Аспирант
|
|
Регистрация: 02.01.2015
Сообщений: 32
|
|
Администраторы, модераторы!
Тема исчерпана и может быть закрыта.
Спасибо
|
|
|
|